﻿@using System.Diagnostics;
@using System.Collections;
@using System.Reflection;
@using System.Runtime.Versioning;
@using Microsoft.AspNetCore.Hosting
@using Microsoft.AspNetCore.Http.Extensions
@using NewLife.Caching
@using NewLife.Common;
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor
@inject IHostingEnvironment Env
@{
    Layout = NewLife.Cube.Setting.Current.Layout;

    ViewBag.Title = "服务器信息";

    var asm = Assembly.GetExecutingAssembly();
    var att = asm.GetCustomAttribute<TargetFrameworkAttribute>();
    var ver = att?.FrameworkDisplayName ?? att?.FrameworkName;
    var httpContext = HttpContextAccessor.HttpContext;
    var req = httpContext.Request;
    //var req = NewLife.Web.HttpContext.Current.Request;
}
<table class="table table-bordered table-hover table-striped table-condensed">
    <thead>
        <tr>
            <th colspan="4">
                服务器信息
            </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="name">
                应用系统：
            </td>
            <td class="value">
                @*据说此功能已被干掉*@
                @*@HttpRuntime.AppDomainAppVirtualPath*@
                &nbsp;
                @if (this.Has((PermissionFlags) 16))
                {
                    <a href="@Url.Action("Restart")" onclick="return confirm('仅重启ASP.Net应用程序域，而不是操作系统！\n确认重启？')">重启应用系统</a>
                }
                &nbsp;&nbsp;&nbsp;&nbsp;@req.GetEncodedUrl()
            </td>
            <td class="name">
                目录：
            </td>
            <td class="value">
                @Env.ContentRootPath
                @*@HttpRuntime.AppDomainAppPath*@
            </td>
        </tr>
        <tr>
            <td class="name">
                域名地址：
            </td>
            <td class="value">
                <span title="SERVER_NAME">@req.Headers["SERVER_NAME"]</span>，
                <span title="LOCAl_ADDR">@req.Headers["Host"]</span>
                &nbsp;<span title="REMOTE_HOST">[@req.Headers["REMOTE_HOST"]]</span>
                <a href="@Url.Action("Main/ServerVar")" target="_blank" title="点击打开服务器变量列表">服务器变量列表</a>
            </td>
            <td class="name">
                计算机用户：
            </td>
            <td class="value">
                @Environment.UserName/@Environment.MachineName
            </td>
        </tr>
        <tr>
            <td class="name">
                应用程序域：
            </td>
            <td class="value">
                @AppDomain.CurrentDomain.FriendlyName
                <a href="@Url.Action("Main/Assembly")" target="_blank" title="点击打开进程程序集列表">程序集列表</a>
            </td>
            <td class="name">
                .Net 版本：
            </td>
            <td class="value">
                @Environment.Version &nbsp;@ver
            </td>
        </tr>
        <tr>
            <td class="name">
                操作系统：
            </td>
            <td class="value">
                @Environment.OSVersion.ToString()
                @*@Runtime.OSName*@
            </td>
            <td class="name">
                Web服务器：
            </td>
            <td class="value">
                @ViewBag.WebServerName
            </td>
        </tr>
        <tr>
            <td class="name">
                处理器：
            </td>
            <td class="value">
                @Environment.ProcessorCount
                核心
            </td>
            <td class="name">
                时间：
            </td>
            <td class="value" title="这里使用了服务器默认的时间格式！后面是开机时间。">
                @DateTime.Now，开机@(new TimeSpan(0, 0, 0, 0, Environment.TickCount))
            </td>
        </tr>
        <tr>
            @{ var process = Process.GetCurrentProcess();}
            <td class="name">
                内存：
            </td>
            <td class="value">
                @*物理内存：@(Runtime.AvailableMemory.ToString("n0"))M / @(Runtime.PhysicalMemory.ToString("n0"))M*@
                工作集: @((process.WorkingSet64 / 1024 / 1024).ToString("n0"))M
                提交: @((process.PrivateMemorySize64 / 1024 / 1024).ToString("n0"))M
                GC: @((GC.GetTotalMemory(false) / 1024 / 1024).ToString("n0"))M
                <a href="@Url.Action("Main/ProcessModules")" target="_blank" title="点击打开进程模块列表">模块列表</a>
            </td>
            <td class="name">
                进程时间：
            </td>
            <td class="value">
                @process.TotalProcessorTime.TotalSeconds.ToString("N2")秒 启动于 @process.StartTime.ToFullString()
            </td>
        </tr>
        <tr>
            <td class="name">
                Session：
            </td>
            <td class="value">
                @httpContext.Session.Keys.Count() 个，@httpContext.Session.IsAvailable Timeout 分钟，SessionID：@httpContext.Session.Id
                <a href="@Url.Action("Main/Session")" target="_blank" title="点击打开Session列表">Session列表</a>
            </td>
            <td class="name">
                Cache：
            </td>
            <td class="value">
                @*@HttpContext.Cache.Count 个，可用：@((Cache.EffectivePrivateBytesLimit / 1024).ToString("n0"))KB*@
                <a href="@Url.Action("Main/Cache")" target="_blank" title="点击打开Cache列表">Cache列表</a>
            </td>
        </tr>
    </tbody>
</table>
<table class="table table-bordered table-hover table-striped table-condensed">
    <thead>
        <tr>
            <th>名称</th>
            <th>标题</th>
            <th>文件版本</th>
            <th>内部版本</th>
            <th>编译时间</th>
            <th>描述</th>
        </tr>
    </thead>
    <tbody>
        @foreach (AssemblyX item in ViewBag.MyAsms)
        {
            <tr>
                <td>@item.Name</td>
                <td>@item.Title</td>
                <td>@item.FileVersion</td>
                <td>@item.Version</td>
                <td>@item.Compile.ToFullString()</td>
                <td>@item.Description</td>
            </tr>
        }
    </tbody>
</table>